home *** CD-ROM | disk | FTP | other *** search
/ The Business Master (3rd Edition) / The Business Master (3rd Edition).iso / files / spreotus / 123fin / realpgm.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  11.1 KB  |  387 lines

  1. 1  KEY(10) ON:ON KEY(10) GOSUB 3
  2. 2   GOTO 5
  3. 3  RUN"MENU.BAT"+CHR$(13)
  4. 5  CLS
  5. 6  LOCATE 23,24:PRINT "Press F10 to EXIT game.
  6. 100  REM ------------------------------
  7. 110  N$=     "REAL ESTATE PROGRAMS"
  8. 120  REM ------------------------------
  9. 130  GOSUB 6200                        'INITIALIZE
  10. 140  X$(1)="MONTHLY PAYMENT"
  11. 150  X$(2)="MORTGAGE SCHEDULE"
  12. 160  X$(3)="REMAINING BALANCE OF LOAN"
  13. 170  X$(4)="EFFECT OF ACCELERATED PAYMENTS"
  14. 180  X$(5)="BALLOON PAYMENT CALCULATION"
  15. 190  X$(6)="AFFORDABLE HOUSE PRICE"
  16. 200  X$(7)="MORTGAGE WITH SECOND"
  17. 210  X$(8)="RENTAL PROPERTY"
  18. 220  N=8 : GOSUB 7000                  'DISPLAY MENU
  19. 230  ON X GOSUB 590,700,880,1040,1430,1600,1830,2110
  20. 240  Q2$="RUN" : GOSUB 3400
  21. 241  IF YN$="N" THEN END ELSE 100
  22. 250  REM ------------------------------
  23. 260  REM ROUTINE TO CALCULATE PAYMENT
  24. 270  REM ------------------------------
  25. 280  REM       CALLING PARAMETERS
  26. 290  REM       IN=ANNUAL INTEREST RATE
  27. 300  REM       YR=NO OF YEARS
  28. 310  REM       AM=ANOUNT OF LOAN
  29. 320  REM
  30. 330  N1=12*YR :I1=IN/100/12 : V=1/(1+I1) :
  31. 340  P=AM*I1/(1-V^N1)
  32. 350  RETURN
  33. 360  REM ------------------------------
  34. 370  REM GET INPUT FOR PAYMENT CALC
  35. 380  REM ------------------------------
  36. 390  Q1$="SPECIFY PARAMETERS" : Q2$=""
  37. 400  Q3$="AMOUNT BORROWED ($)"  :GOSUB 6600
  38. 410  Q3$="ANNUAL INT RATE (%) " :GOSUB 6600
  39. 420  Q3$="TERM OF LOAN (YRS)"   :GOSUB 6600
  40. 430  AM=PAR(1)
  41. 440  IN=PAR(2)
  42. 450  YR=PAR(3)
  43. 460  RETURN
  44. 470  REM ------------------------------
  45. 480  REM CALCULATE REMAINING BALANCE
  46. 490  REM ------------------------------
  47. 500  REM     CALLING PARAMETERS
  48. 510  REM     P=PAYMENT
  49. 520  REM     IN=ANNUAL INTEREST RATE
  50. 530  REM     N=PAYMENT NUMBER
  51. 540  REM     AM = AMOUNT OF LOAN
  52. 550  FOR I= 1 TO N
  53. 560      AM= AM-P+IN/12/100*AM
  54. 570  NEXT I
  55. 580  RETURN
  56. 590  REM -----------------------------------
  57. 600  N$=    "MONTHLY PAYMENT CALCULATION"
  58. 610  REM -----------------------------------
  59. 620  GOSUB 6200  : K=1                 'INITIALIZE
  60. 630  GOSUB 360                         'GET PARAMETERS
  61. 640  GOSUB 250                         'CALCULATE PYMT
  62. 650  PRINT
  63. 660  PRINT "MONTHLY PAYMENT IS";TAB(22)
  64. 670  PRINT USING "$$######,.##"; P
  65. 680  Q2$="COMPUTE" : GOSUB 3400        'ASK FOR ANOTHER
  66. 690  IF YN$="N" THEN RETURN ELSE 620
  67. 700  REM ------------------------------
  68. 710  N$=      "MORTGAGE SCHEDULE"
  69. 720  REM ------------------------------
  70. 730  GOSUB 6200  : K=1                'INITIALIZE
  71. 740  GOSUB 360                        'GET LOAN PARAMETERS
  72. 750  Q3$="YEAR"
  73. 760  GOSUB 6600  :N=PAR(4)            'GET YEAR
  74. 770  GOSUB 250                        'CALCULATE PAYMENT
  75. 780  N=12*N-12                        'COMPUTE FIRST MONTH
  76. 790  GOSUB 470                        'GET BEGINNING BALANCE
  77. 800  PRINT "      MONTH   PRINCIPAL     INTEREST     BALANCE"
  78. 810  FOR J=1 TO 12
  79. 820    I1=IN/12/100*AM : P1=P-I1 :AM=AM-P1 'COMPUTE P & I
  80. 830    PRINT USING "########,.##";N+1,P1,I1,AM
  81. 840    N=N+1
  82. 850  NEXT J
  83. 860  Q2$="COMPUTE" : GOSUB 3400
  84. 870  IF YN$="N" THEN RETURN ELSE 700
  85. 880  REM ------------------------------
  86. 890  N$=      "REMAINING BALANCE"
  87. 900  REM ------------------------------
  88. 910  GOSUB 6200  : K=1            'INITIALIZE
  89. 920  GOSUB 360                    'GET LOAN PARAMETERS
  90. 930  Q3$="PAYMENT NUMBER"
  91. 940  GOSUB 6600  :N=PAR(4)        'GET PAYMENT NO.
  92. 950  GOSUB 250                    'CALCULATE PAYMENT
  93. 960  GOSUB 470                    'COMPUTE BALANCE
  94. 970  PRINT
  95. 980  PRINT "MONTHLY PAYMENT";TAB(22);
  96. 990  PRINT USING "$$######,.##";P
  97. 1000  PRINT "BAL AFTER ";N; " PMTS"; TAB(22);
  98. 1010  PRINT USING "$$######,.##";AM
  99. 1020  Q2$="COMPUTE" : GOSUB 3400  'ASK FOR ANOTHER
  100. 1030  IF YN$="N" THEN RETURN ELSE 880
  101. 1040  REM ------------------------------
  102. 1050  N$=    "ACCELERATED PAYMENTS"
  103. 1060  REM ------------------------------
  104. 1070  GOSUB 6200 : K=1           'INITIALIZE
  105. 1080  GOSUB 360                  'GET LOAN PARAMETERS
  106. 1090  Q3$="YEAR OF INCREASE "
  107. 1100  GOSUB 6600  :N=PAR(4)      'GET YEAR
  108. 1110  GOSUB 250                  'CALCULATE PAYMENT
  109. 1120  N=12*N-12                  'COMPUTE FIRST MONTH
  110. 1130  Q3$="EXTRA AMOUNT PAID ($)"
  111. 1140  GOSUB 6600 : EX=PAR(5)     'GET EXTRA
  112. 1150  REM COMPUTE PRIN INT AND BAL TO DATE
  113. 1160  TI=0 : BAL=0 : TP=0
  114. 1170  FOR J=1 TO N
  115. 1180      I1=IN/12/100*AM : P1=P-I1 : AM=AM-P1
  116. 1190      TI=TI+I1 : TP=TP+P1
  117. 1200  NEXT J
  118. 1210  REM COMPUTE INTEREST WITH NO INCREASE
  119. 1220  TI2=0 : AM2=PAR(1)
  120. 1230  FOR J=1 TO 12*YR
  121. 1240    I2=IN/12/100*AM2 : P2=P-I2 :AM2=AM2-P2
  122. 1250    TI2=TI2+I2
  123. 1260  NEXT J
  124. 1270  REM COMPUTE WITH XTRA PAYMENT
  125. 1280  J=0
  126. 1290  I1=IN/12/100*AM: TI=TI+I1
  127. 1300  P1=P+EX-I1 : TP=TP+P1
  128. 1310  AM=AM-P1
  129. 1320  J=J+1
  130. 1330  IF AM >0 THEN 1290
  131. 1340  PRINT
  132. 1350  PRINT "YEARS TO PAY OFF";TAB(25);
  133. 1360  PRINT USING "######,.##";PAR(4)+J/12-1
  134. 1370  PRINT "TOTAL INTEREST PAID";TAB(22);
  135. 1380  PRINT USING "$$######,.##";TI
  136. 1390  PRINT "INTEREST SAVED";TAB(22)
  137. 1400  PRINT USING "$$######,.##";TI2-TI
  138. 1410  Q2$="COMPUTE" : GOSUB 3400
  139. 1420  IF YN$="N" THEN RETURN ELSE 1040
  140. 1430  REM ------------------------------
  141. 1440  N$=       "BALLOON PAYMENT"
  142. 1450  REM ------------------------------
  143. 1460  GOSUB 6200  : K=1          'INITIALIZE
  144. 1470  GOSUB 360                  'GET LOAN PARAMETERS
  145. 1480  Q3$="YEAR LOAN DUE"
  146. 1490  GOSUB 6600  :N=12*PAR(4)   'GET YEAR DUE
  147. 1500  GOSUB 250                  'CALCULATE PAYMENT
  148. 1510  GOSUB 470                  'COMPUTE BALANCE
  149. 1520  PRINT
  150. 1530  PRINT "MONTHLY PAYMENT";TAB(22);
  151. 1540  PRINT USING "$$######,.##";P
  152. 1550  PRINT : PRINT "BALLOON PAYMENT"
  153. 1560  PRINT "AFTER ";N/12; " YEARS"; TAB(22);
  154. 1570  PRINT USING "$$######,.##";AM
  155. 1580  Q2$="COMPUTE" : GOSUB 3400       'ASK FOR ANOTHER
  156. 1590  IF YN$="N" THEN RETURN ELSE 1430
  157. 1600  REM -----------------------------
  158. 1610  N$=   "AFFORDABLE HOUSE PRICE"
  159. 1620  REM -----------------------------
  160. 1630  GOSUB 6200 : K=1                 'INITIALIZE
  161. 1640  Q1$="SPECIFY PARAMETERS" : Q2$=""
  162. 1650  Q3$="ANNUAL INT RATE (%) "   : GOSUB 6600
  163. 1660  Q3$="TERM OF LOAN (YRS)"     : GOSUB 6600
  164. 1670  Q3$="BUYERS ANNUAL INC"      : GOSUB 6600
  165. 1680  Q3$="EST ANNUAL TAX & INS"   : GOSUB 6600
  166. 1690  Q3$="% OF INC FOR PAYMENTS"  : GOSUB 6600
  167. 1700  Q3$="% DOWN PAYMENT"         : GOSUB 6600
  168. 1710  PRINT
  169. 1720  REM COMPUTE ALLOWABLE PAYMENT
  170. 1730  P=PAR(5)/100*PAR(3)/12 - PAR(4)/12
  171. 1740  REM COMPUTE AMOUNT FINANCED
  172. 1750  IN=PAR(1)/100/12 :N1=12*PAR(2) : V=1/(1+IN)
  173. 1760  AM=P*(1-V^N1)/IN
  174. 1770  PRINT "AMOUNT FINANCED";TAB(22);
  175. 1780  PRINT USING "$$######,.##";AM
  176. 1790  PRINT "AFFORDABLE HOUSE"; TAB(22);
  177. 1800  PRINT USING "$$######,.##";AM/(1-PAR(6)/100)
  178. 1810  Q2$="COMPUTE" : GOSUB 3400
  179. 1820  IF YN$="N" THEN RETURN ELSE 1600
  180. 1830  REM -----------------------------
  181. 1840  N$=   "MORTGAGE WITH SECOND"
  182. 1850  REM -----------------------------
  183. 1860  GOSUB 6200 : K=1
  184. 1870  Q1$="SPECIFY PARAMETERS" : Q2$=""
  185. 1880  Q3$="PURCHASE PRICE ($)"   : GOSUB 6600
  186. 1890  Q3$="CASH AVAILABLE ($)"   : GOSUB 6600
  187. 1900  Q3$="FIRST MORT ($)"       : GOSUB 6600
  188. 1910  Q3$="FIRST RATE (%)"       : GOSUB 6600
  189. 1920  Q3$="FIRST TERM (YRS)"     : GOSUB 6600
  190. 1930  Q3$="SECOND RATE (%)"      : GOSUB 6600
  191. 1940  PRINT
  192. 1950  AM=PAR(3) : IN=PAR(4) : YR=PAR(5)
  193. 1960  REM COMPUTE FIRST PAYMENT
  194. 1970  GOSUB 250
  195. 1980  PRINT "PAYMENT (FIRST)";TAB(22);
  196. 1990  PRINT USING "$$######,.##";P
  197. 2000  REM COMPUTE 2ND PAYMENT
  198. 2010  IF PAR(2) < PAR(1)-PAR(3) THEN GOTO 2040
  199. 2020     PRINT "SECOND MORTGAGE NOT REQUIRED"
  200. 2030     GOTO 2090
  201. 2040  PRINT "PAYMENT (SECOND)";TAB(22)
  202. 2050  P2=(PAR(1)-PAR(2)-PAR(3))*PAR(6)/100/12
  203. 2060  PRINT USING "$$######,.##";P2
  204. 2070  PRINT "TOTAL PAYMENTS";TAB(22);
  205. 2080  PRINT USING "$$######,.##";P+P2
  206. 2090  Q2$="COMPUTE" : GOSUB 3400
  207. 2100  IF YN$="N" THEN RETURN ELSE 1830
  208. 2110  REM -----------------------------
  209. 2120  N$=  "RENTAL PROPERTY ANALYSIS"
  210. 2130  REM -----------------------------
  211. 2140  GOSUB 6200 : K=1
  212. 2150  REM GET PARAMETERS
  213. 2160  GOSUB 360
  214. 2170  Q3$="ANNUAL INSURANCE ($)" : GOSUB 6600
  215. 2180  Q3$="ANNUAL TAXES ($)"     : GOSUB 6600
  216. 2190  Q3$="ANNUAL MAINT ($)"     : GOSUB 6600
  217. 2200  Q3$="MONTHLY INCOME ($)"   : GOSUB 6600
  218. 2210  GOSUB 250                       'CALCULATE PYMT
  219. 2220  PRINT
  220. 2230  PRINT "MONTHLY PAYMENT IS";TAB(22);
  221. 2240  PRINT USING "$$######,.##";P
  222. 2250  PRINT "MONTHLY CASH FLOW";TAB(22);
  223. 2260  CF=PAR(7)-P-(PAR(4)+PAR(5)+PAR(6))/12
  224. 2270  PRINT USING "$$######,.##";CF
  225. 2280  Q2$="COMPUTE" : GOSUB 3400
  226. 2290  IF YN$="N" THEN RETURN ELSE 2110
  227. 3400  REM          "ANOTH"
  228. 3401  ' --------------------------------
  229. 3402  '      ASK FOR ANOTHER RUN
  230. 3403  '
  231. 3404  'THIS ROUTINE ASKS THE USER WHETHER TO CONTINUE
  232. 3405  '
  233. 3406  'CALLING PARAMETERS:
  234. 3407  '    Q2$= STRING TO SPECIFY WHAT OPERATION TO DO
  235. 3408  '
  236. 3409  'RETURNED PARAMETERS:
  237. 3410  '    YN$= A "Y" OR "N" FOR YES OR NO
  238. 3411  '
  239. 3412  ' --------------------------------
  240. 3420  Q1$="WOULD YOU LIKE TO "
  241. 3430  Q3$="AGAIN Y OR N ?"
  242. 3440  GOSUB 5000                       'PRESENT DIALOG
  243. 3450  GOSUB 7800                       'ASK YES OR NO
  244. 3460  RETURN
  245. 5000  REM        "DIALOG"
  246. 5001  ' -------------------------------
  247. 5002  '         DIALOGUE
  248. 5003  '
  249. 5004  'CALLING PARAMETERS:
  250. 5005  '   Q1$,Q2$,Q3$, = QUESTIONS TO DISPLAY
  251. 5006  '
  252. 5007  'RETURNED PARAMETERS:
  253. 5008  '   NONE
  254. 5009  '
  255. 5010  'COMMENT: UNUSED QUESTION STRINGS SHOULD BE SET
  256. 5011  '          TO NULL ("")
  257. 5012  '
  258. 5013  ' -------------------------------
  259. 5020  FOR I= 20 TO 23
  260. 5030   LOCATE I,1
  261. 5040   IF I > 20 THEN 5080
  262. 5050     FOR J= 1 TO 40           'DRAW A BORDER
  263. 5060       PRINT "-";
  264. 5070     NEXT J
  265. 5080   IF I = 21 THEN PRINT Q1$; 'FIRST QUESTION
  266. 5090   IF I = 22 THEN PRINT Q2$; 'SECOND QUESTION
  267. 5100   IF I = 23 THEN PRINT Q3$; 'THIRD QUESTION
  268. 5109  REM RESTORE CURSOR HERE AFTER 3RD QUEST
  269. 5110    CP1=POS(N)
  270. 5120    CP=POS(N)                'CURSOR COLUMN POSITION
  271. 5130    IF CP>40 THEN 5150
  272. 5140     PRINT " "; : GOTO 5120  'ERASE ANY PRIOR INFO
  273. 5149  REM RESTORE CURSOR FOR USER RESPONSE
  274. 5150  LOCATE I,CP1
  275. 5160  NEXT I
  276. 5170  RETURN
  277. 5400  REM         "INCH"
  278. 5401  ' ------------------------------
  279. 5402  '        INPUT CHARACTER
  280. 5403  '
  281. 5404  'CALLING PARAMETERS:
  282. 5405  '   NONE
  283. 5406  '
  284. 5407  'RETURNED PARAMETERS:
  285. 5408  '   CH$=INPUT CHARACTER
  286. 5409  '
  287. 5410  ' ------------------------------
  288. 5420  REM WAIT FOR INPUT CHARACTER
  289. 5430  CH$= INKEY$ : IF CH$="" THEN 5430
  290. 5440  Z=ASC(CH$)
  291. 5450  IF Z < 97 OR Z > 122 THEN 5470
  292. 5460  Z=Z-32
  293. 5470  CH$=CHR$(Z)
  294. 5480  RETURN
  295. 6200  REM            "INIT"
  296. 6201  '----------------------------------
  297. 6202  '         INITIALIZE DISPLAY
  298. 6203  '
  299. 6204  'THIS ROUTINE CLEARS THE SCREEN
  300. 6205  '   AND PRINTS THE PROGRAM TITLE
  301. 6206  'CALLING PARAMETERS:
  302. 6207  '   N$=TITLE OF PROGRAM
  303. 6208  '
  304. 6209  'RETURNED PARAMETERS:
  305. 6210  '   NONE
  306. 6211  '
  307. 6212  ' ----------------------------------
  308. 6220  CLS                                 'CLEAR SCREEN
  309. 6230  PRINT N$    : PRINT                 'TITLE
  310. 6240  KEY OFF
  311. 6250  RETURN
  312. 6600  REM             "INPAR"
  313. 6601  ' --------------------------------
  314. 6602  '         INPUT PARAMETERS
  315. 6603  '
  316. 6604  'CALLING PARAMETERS:
  317. 6605  '   Q1$,Q2$=USER INSTRUCTIONS
  318. 6606  '   Q3$=NAME OF DATA ITEM
  319. 6607  '
  320. 6608  'RETURNED PARAMETERS:
  321. 6609  '   PAR(K)=THE DATA ITEM OBTAINED
  322. 6610  '
  323. 6611  'COMMENT: CALL WITH K=1 FOR FIRST DATA ITEM
  324. 6612  '         K AUTOMATICALLY UPDATED
  325. 6613  '
  326. 6614  ' -------------------------------
  327. 6620  GOSUB 5000                        'ASK QUESTIONS
  328. 6630  INPUT PAR(K)                      'GET VALUE
  329. 6640  REM ECHO QUESTION AND ANSWER
  330. 6650  LOCATE K+2,3
  331. 6660  PRINT Q3$; TAB(24);
  332. 6670  PRINT USING "######,.##"; PAR(K)
  333. 6680  K=K+1
  334. 6690  RETURN
  335. 7000  REM         "MENU"
  336. 7001  ' ------------------------------
  337. 7002  '        MENU PROGRAM
  338. 7003  '
  339. 7004  'THIS PROGRAM DISPLAYS A MENUE
  340. 7005  '  AND CHOOSES A PROGRAM
  341. 7006  'CALLING PARAMETERS:
  342. 7007  '  N= NO. OF MENU ITEMS
  343. 7008  '  X$(I)= ARRAY OF PROGRAM NAMES
  344. 7009  '
  345. 7010  'RETURNED PARAMETERS:
  346. 7011  '  X=PROGRAM NUMBER CHOSEN
  347. 7012  '
  348. 7013  ' ------------------------------
  349. 7020  CLS
  350. 7030  FOR I = 1 TO N               'DISPLAY MENU
  351. 7040    IF I=10 THEN PRINT 0; ELSE PRINT I;
  352. 7050     PRINT  "= " ; X$(I)
  353. 7060  NEXT I
  354. 7070  Q1$="" : Q2$=""
  355. 7080  Q3$="CHOOSE PROGRAM :"
  356. 7085  PRINT:PRINT  "        F10 to EXIT"
  357. 7090  GOSUB 5000                   'ASK QUESTIONS
  358. 7100  GOSUB 5400                   'INPUT CHAR
  359. 7110  X= VAL(CH$)
  360. 7119  REM SEE IF CHAR IN RANGE
  361. 7120  IF X>=1 AND X<=N THEN RETURN
  362. 7130  IF X=0 AND N=10 THEN 7140 ELSE 7150
  363. 7140  X=10 : RETURN
  364. 7150  Q1$="ILLEGAL CHOICE, CHOOSE AGAIN"
  365. 7160  GOSUB 5000
  366. 7170  GOTO 7100
  367. 7800  REM          "YESNO"
  368. 7801  ' -------------------------------
  369. 7802  '            YES-NO
  370. 7803  '
  371. 7804  'CALLING PARAMETERS:
  372. 7805  '  NONE
  373. 7806  '
  374. 7807  'RETURNED PARAMETERS:
  375. 7808  '  YN$= CONTAINS A Y OR N
  376. 7809  '
  377. 7810  ' -------------------------------
  378. 7815  LOCATE 23,24:PRINT "Press F10 to EXIT program.
  379. 7820  REM WAIT FOR KEY TO BE STRUCK
  380. 7830  YN$=INKEY$ : IF YN$="" THEN 7830
  381. 7840  IF YN$="y" THEN YN$="Y"
  382. 7850  IF YN$="n" THEN YN$="N"
  383. 7860  IF YN$ = "Y" OR YN$ = "N" THEN 7890
  384. 7870  REM NOT YES OR NO TRY AGAIN
  385. 7880  GOTO 7830
  386. 7890  GOTO 110
  387.